﻿Imports System.Net.Mail
Public Class ServicioCorreoSGS
    ''' <summary>
    ''' Funcion que retorna true si detecta que la computadora tiene acceso a internet de lo contrario devuelve false
    ''' </summary>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Shared Function HayConexionInternet() As Boolean
        Try
            If My.Computer.Network.IsAvailable() And My.Computer.Network.Ping(My.Resources.ServicioCorreoSGS.paginaPruebaConeccion, 5000) Then
                Return True
            End If
        Catch ex As Exception
            LogSGS.RegistrarLogSinEnviarCorreo(My.Resources.StringGlobal.prgVinicio, "Error en la clase Servicio de Correo", ex, My.Resources.StringGlobal.mdlGeneral, "ServicioCorreoSGS", "HayConexionInternet")
        End Try
       
        Return False
    End Function

    ''' <summary>
    ''' Funcion para reportar los errores del Sistema vía correo electrónicos
    ''' </summary>
    ''' <param name="idLogParam">Corresponde al id del log que se generó en la base de datos</param>
    ''' <param name="exParam">Corresponde a la excepcion capturada por el TRY</param>
    ''' <param name="programadorParam">Corresponde al nombre del Programador, debe ser extraido de los recursos (My.Resources.StringGlobal.nombreProgramador)</param>
    ''' <param name="moduloParam">Corresponde al modulo, deber ser extraido de los recursos ( My.Resources.StringGlobal.nombreModulo)</param>
    ''' <param name="comentarioParam">Corresponde a un campo libre en el cual el programador puede colocar un comentario</param>
    ''' <remarks></remarks>
    ''' 
    Public Shared Sub ReportarErrorPorCorreo(ByVal idLogParam As String, ByRef exParam As System.Exception, ByVal programadorParam As String, moduloParam As String, ByVal comentarioParam As String)
        If HayConexionInternet() Then
            Try
                Dim opcion = MsgBox(My.Resources.ServicioCorreoSGS.msjEnviarError, MsgBoxStyle.YesNo + MsgBoxStyle.Question, My.Resources.ServicioCorreoSGS.msjEnviarErrorTituloVentana)
                If opcion = vbYes Then
                    Using correo As New MailMessage()
                        Using smtp As New SmtpClient()
                            Dim idUser As Integer = My.Forms.MDI.Iduser.Caption
                            correo.From = New MailAddress(My.Resources.ServicioCorreoSGS.CorreoOrigen, My.Resources.ServicioCorreoSGS.NombreOrigen, System.Text.Encoding.UTF8)
                            correo.To.Add(My.Resources.ServicioCorreoSGS.CorreoDestino1)
                            correo.To.Add(My.Resources.ServicioCorreoSGS.CorreoDestino2)
                            correo.To.Add(My.Resources.ServicioCorreoSGS.CorreoDestino3)
                            correo.SubjectEncoding = System.Text.Encoding.UTF8()
                            correo.Subject = My.Resources.ServicioCorreoSGS.Asunto
                            correo.Body = String.Format("######## IDLog: {0}   ##   Fecha: {1}   ##   Hora: {2}   ##   Programador: {3}   ##   Modulo: {4}   ##   Comentario: {5}   ##   Computadora: {6}   ##   Usuario: {7} ######## ************ Nota: La excepción se adjuntó al correo como archivo de texto (.txt). Este correo fue generado automáticamente por el Sistema, favor no responderlo. ************", idLogParam, Date.Today.ToString, TimeOfDay.TimeOfDay.ToString, programadorParam, moduloParam, comentarioParam, My.Computer.Name, idUser.ToString)
                            correo.Attachments.Add(Attachment.CreateAttachmentFromString(exParam.ToString, My.Resources.ServicioCorreoSGS.NombreArchivoAdjunto))
                            correo.BodyEncoding = System.Text.Encoding.UTF8()
                            correo.IsBodyHtml = False
                            correo.Priority = MailPriority.High
                            smtp.Credentials = New System.Net.NetworkCredential(My.Resources.ServicioCorreoSGS.CorreoOrigen, My.Resources.ServicioCorreoSGS.ContrasenaOrigen)
                            smtp.Port = 25
                            smtp.Host = My.Resources.ServicioCorreoSGS.smtpHost
                            smtp.EnableSsl = True
                            smtp.Send(correo)
                            MsgBox(My.Resources.ServicioCorreoSGS.msjMensajeEnviado, MsgBoxStyle.Information + MsgBoxStyle.OkOnly, My.Resources.ServicioCorreoSGS.msjMensajeEnviadoTitulo)
                        End Using
                    End Using
                End If
            Catch ex As Exception
                LogSGS.RegistrarLogSinEnviarCorreo(My.Resources.StringGlobal.prgVinicio, "Error en la clase Servicio de Correo", ex, My.Resources.StringGlobal.mdlGeneral, "ServicioCorreoSGS", "ReportarErrorPorCorreo")
                MsgBox(My.Resources.ServicioCorreoSGS.msjMensajeNoEnviado, MsgBoxStyle.Critical + MsgBoxStyle.OkOnly, My.Resources.ServicioCorreoSGS.msjMensajeNoEnviadoTitulo)
            End Try
        End If
    End Sub

    ''' <summary>
    ''' Funcion para enviar correos electónicos a soporte técnico del Sistema
    ''' </summary>
    ''' <param name="asunto">Corresponde al asunto del correo</param>
    ''' <param name="mensaje">Corresponde al cuerpo del mensaje</param>
    ''' <remarks></remarks>
    Public Shared Sub EnviarCorreo(ByVal asunto As String, ByVal mensaje As String)
        If HayConexionInternet() Then
            Try
                Using correo As New MailMessage()
                    Using smtp As New SmtpClient()
                        Dim idUser As Integer = My.Forms.MDI.Iduser.Caption
                        correo.From = New MailAddress(My.Resources.ServicioCorreoSGS.CorreoOrigen, My.Resources.ServicioCorreoSGS.NombreOrigen, System.Text.Encoding.UTF8)
                        correo.To.Add(My.Resources.ServicioCorreoSGS.CorreoDestino1)
                        correo.To.Add(My.Resources.ServicioCorreoSGS.CorreoDestino2)
                        correo.To.Add(My.Resources.ServicioCorreoSGS.CorreoDestino3)
                        correo.SubjectEncoding = System.Text.Encoding.UTF8()
                        correo.Subject = asunto
                        correo.Body = mensaje
                        correo.BodyEncoding = System.Text.Encoding.UTF8()
                        correo.IsBodyHtml = False
                        correo.Priority = MailPriority.High
                        smtp.Credentials = New System.Net.NetworkCredential(My.Resources.ServicioCorreoSGS.CorreoOrigen, My.Resources.ServicioCorreoSGS.ContrasenaOrigen)
                        smtp.Port = 25
                        smtp.Host = My.Resources.ServicioCorreoSGS.smtpHost
                        smtp.EnableSsl = True
                        smtp.Send(correo)
                        MsgBox(My.Resources.ServicioCorreoSGS.msjMensajeEnviado, MsgBoxStyle.Information + MsgBoxStyle.OkOnly, My.Resources.ServicioCorreoSGS.msjMensajeEnviadoTitulo)
                    End Using
                End Using
            Catch ex As Exception
                LogSGS.RegistrarLogSinEnviarCorreo(My.Resources.StringGlobal.prgVinicio, "Error en la clase Servicio de Correo", ex, My.Resources.StringGlobal.mdlGeneral, "ServicioCorreoSGS", "EnviarCorreo")
                MsgBox(My.Resources.ServicioCorreoSGS.msjMensajeNoEnviado, MsgBoxStyle.Critical + MsgBoxStyle.OkOnly, My.Resources.ServicioCorreoSGS.msjMensajeNoEnviadoTitulo)
            End Try
        End If
    End Sub
End Class
